// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(global){
    var cache = {};  
    var tmpl = function (str, data){
        if(ujs.Type.isObject(str)){
            //使模板与数据参数顺序无关，避免参数顺序颠倒导致的bug。
            var tmp = str;
            str = data;
            data = tmp;
        }
        if(ujs.Type.isArray(str)){
            str = str.join('');
        }
        // Figure out if we're getting a template, or if we need to
        // load the template - and be sure to cache the result.
        var fn = !/\W/.test(str) ?
            //若str为一个标识符.
            cache[str] = cache[str] || tmpl(document.getElementById(str).innerHTML) :
            //若str为一段模板标记.
            // Generate a reusable function that will serve as a template generator (and which will be cached).
            new Function('o', [
                "var p = [], print = function(){ p.push.apply( p, arguments ); };",                    
                // Introduce the data as local variables using with(){}
                "with(o){ ",
                    "p.push('" ,
                    //Convert the template into pure JavaScript
                    str.replace( /[\r\t\n]/g, " " )
                        .split( "<%" ).join( "\t" )
                        .replace( /((^|%>)[^\t]*)'/g, "$1\r" )
                        .replace( /\t=(.*?)%>/g, "',$1,'" )
                        .split( "\t" ).join( "');" )
                        .split( "%>" ).join( "p.push('" )
                        .split( "\r" ).join( "\\'" ),
                      
                    "');",
                "} ",
                "return p.join('');"
            ].join(''));
    
        // Provide some basic currying to the user
        return data ? fn( data ) : fn;
    };
    
    //TODO 老版本兼容性代码，新项目中去掉.
    window.tmpl = tmpl;
    
    ujs.define('tmpl', 'ujs', function(){
        return tmpl;
    });
})(window);

/*
<!--模板示例 1-->
<script type="text/html" id="item_tmpl">
    <div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
        <div class="grid_1 alpha right">
            <img class="righted" src="<%=profile_image_url%>"/>
        </div>
        <div class="grid_6 omega contents">
            <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
        </div>
    </div>
</script>
*/

/*
<!--模板示例 2-->
<script type="text/html" id="user_tmpl">
    <% for ( var i = 0; i < users.length; i++ ) { %>
        <li><a href="<%=users[i].url%>"><%=users[i].name%></a></li>
    <% } %>
</script>
*/

/*
//普通模板解析
var results = document.getElementById("results");
results.innerHTML = tmpl("item_tmpl", dataObject);
*/

/*
//预编译模板解析
var show_user = tmpl("item_tmpl"), 
    html = "";
for ( var i = 0; i < users.length; i++ ) {
    html += show_user( users[i] );
}
*/